﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using SushiSOAPServices.Dominio;
using SushiSOAPServices.Persistencia;
using SushiSOAPServices.Exceptions;

namespace SushiSOAPServices
{
    public class Pagos : IPagos
    {
        private PagoDAO pagoDAO = null;
        private PagoDAO PagoDAO
        {
            get
            {
                if (pagoDAO == null)
                    pagoDAO = new PagoDAO();
                return pagoDAO;
            }
        }

        public Pago Envia(Pago pago)
        {
            VisaWS.VisaServicesClient proxy = new VisaWS.VisaServicesClient();
            VisaWS.Visa existeTarjeta = proxy.ValidarNroTarjeta(pago.NroTarjeta);

            if (existeTarjeta == null)
            {
                PagoException ex = new PagoException { Message = "El nro no se encuentra Registrado. Ingrese un nro. válido" };
                throw new FaultException<PagoException>(ex, ex.Message);
            }

            Visa visaAEnviar = new Visa();
            visaAEnviar.IdVisa = 0;
            visaAEnviar.NroTarjeta = pago.NroTarjeta;
            visaAEnviar.Monto = pago.Monto;
            visaAEnviar.Estado = "Verificar";

            Visa visaARecibir = PagoDAO.Envia(visaAEnviar);

            if (visaARecibir.Estado.Equals("Rechazado"))
            {
                PagoException ex = new PagoException { Message = "El Cliente no se encuentra con saldo para realizar el pedido" };
                throw new FaultException<PagoException>(ex, ex.Message);
            }

            Pago pagoACrear = new Pago();

            pagoACrear.IdPago = PagoDAO.obtenerNuevoId();
            pagoACrear.IdPedido = pago.IdPedido;
            pagoACrear.Estado = "CNCLDO";
            pagoACrear.TipoTarjeta = pago.TipoTarjeta;
            pagoACrear.NroTarjeta = pago.NroTarjeta;
            pagoACrear.FechaPago = DateTime.Now.Date;
            pagoACrear.Monto = pago.Monto;
            
            
            Pago pagoCreado = Crea(pagoACrear);

            return pagoCreado;

        }


        public Pago Crea(Pago pago)
        {
            return PagoDAO.Crear(pago);
        }
    }
}
